package com.cskaoyan.extend.basic;

/*
        继承的优点：
            代码复用
            提高了代码的可维护性(这是一把双刃剑)


        举例: 我们是一家游戏公司
        第一个版本：实现一个游戏，模拟鸭子的游戏，有多种类型的鸭子，具有共同的两种行为:
        呱呱叫  和 游动的行为

        第一个版本中 使用继承来实现（继承的优势）

        第二个版本:
        a. 新增加一种鸭子的类型，叫做模型鸭。
        b. 给所有的鸭子增加一种行为，fly(除了模型鸭)
        第二个版本的游戏开发中，体现出了继承的缺点

        父类的修改可能会出现在所有子类中(我们无法选择这些修改可以反应在，
        哪些子类中，不可以反应在哪些子类中)

 */
public class Demo2BenefitAndFlaw {

    public static void main(String[] args) {
        FirstTypeDuck firstTypeDuck = new FirstTypeDuck();
//        firstTypeDuck.quack();
//        firstTypeDuck.swim();

        firstTypeDuck.fly();


        SecondTypeDuck secondTypeDuck = new SecondTypeDuck();
//        secondTypeDuck.quack();
//        secondTypeDuck.swim();
        secondTypeDuck.fly();

        ModelDuck modelDuck = new ModelDuck();
        modelDuck.fly();


    }
}

class BaseDuck {

    /*
          呱呱叫
     */
    public void quack() {
        System.out.println("呱呱叫");
    }

    public void swim() {
        System.out.println("swimming");
    }

    public void fly() {
        System.out.println("飞行ing");
    }

}

class FirstTypeDuck  extends BaseDuck{

}

class SecondTypeDuck extends BaseDuck {

}

class ModelDuck extends BaseDuck {

}


